package com.lst.demo.utils.wpsutils;

import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import androidx.core.content.FileProvider;
import android.text.TextUtils;

import com.blankj.utilcode.util.ToastUtils;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;

public class FileOpen {

    public static void openFile(Context context, File file) {

        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            //intent.addCategory(Intent.CATEGORY_DEFAULT);
            Uri uriForFile;
            if (Build.VERSION.SDK_INT > 23) {
                //Android 7.0之后
                uriForFile = FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider", file);
                intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);//给目标文件临时授权
            } else {
                uriForFile = Uri.fromFile(file);
            }
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//系统会检查当前所有已创建的Task中是否有该要启动的Activity的Task;
            // 若有，则在该Task上创建Activity；若没有则新建具有该Activity属性的Task，并在该新建的Task上创建Activity。
            intent.setDataAndType(uriForFile, getMimeTypeFromFile(file));
            context.startActivity(intent);
        } catch (ActivityNotFoundException e) {
            // Toast.makeText(context, "附件不能打开，请下载相关软件！", Toast.LENGTH_SHORT).show();
            ToastUtils.showShort("附件不能打开，请下载相关软件！");
        }
    }

    public static void openFile2(Context context, File file) {
        try {
            //  openWps(context, file);
            Intent intent = new Intent();
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setAction(Intent.ACTION_VIEW);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            // 判断版本大于等于7.0
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
                StrictMode.setVmPolicy(builder.build());
                Uri data = Uri.fromFile(file);
                intent.setDataAndType(data, getMimeTypeFromFile(file));

            } else {
                intent.setDataAndType(Uri.fromFile(file), getMimeTypeFromFile(file));
                Intent.createChooser(intent, "请选择对应的软件打开该附件！");
            }

            context.startActivity(intent);

        } catch (ActivityNotFoundException e) {
            // Toast.makeText(context, "附件不能打开，请下载相关软件！", Toast.LENGTH_SHORT).show();
            ToastUtils.showShort("附件不能打开，请下载相关软件！");
        }

    }


    /**
     * 使用自定义方法获得文件的MIME类型
     */
    public static String getMimeTypeFromFile(File file) {
        String type = "*/*";
        String fName = file.getName();
        //获取后缀名前的分隔符"."在fName中的位置。
        int dotIndex = fName.lastIndexOf(".");
        if (dotIndex > 0) {
            //获取文件的后缀名
            String end = fName.substring(dotIndex, fName.length()).toLowerCase(Locale.getDefault());
            //在MIME和文件类型的匹配表中找到对应的MIME类型。
            HashMap<String, String> map = MyMimeMap.getMimeMap();
            if (!TextUtils.isEmpty(end) && map.keySet().contains(end)) {
                type = map.get(end);
            }
        }
        return type;
    }


    public static void openWps(Context context, String file) {
        //            // 判断版本大于等于7.0
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            if (checkWps(context)) {

                // TODO 绕过7.0权限检查,不需要使用FileProvider 这种方式日后不知道还能不能用
                StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
                StrictMode.setVmPolicy(builder.build());
                Uri data = Uri.fromFile(new File(file));
                Intent intent = context.getPackageManager().getLaunchIntentForPackage("cn.wps.moffice_eng");
                Bundle bundle = new Bundle();
                intent.setData(data);//这里采用传入文档的在线地址进行打开，免除下载的步骤，也不需要判断安卓版本号
                intent.putExtras(bundle);
                context.startActivity(intent);
            }

        } else {
            if (checkWps(context)) {
                Intent intent = context.getPackageManager().getLaunchIntentForPackage("cn.wps.moffice_eng");
                Bundle bundle = new Bundle();
                intent.setData(Uri.fromFile(new File(file)));//这里采用传入文档的在线地址进行打开，免除下载的步骤，也不需要判断安卓版本号
                intent.putExtras(bundle);
                context.startActivity(intent);
            }
        }
    }


    public static void openWpsNew(Context context, String file) {
        //            // 判断版本大于等于7.0
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            if (checkWps(context)) {

                //TODO 使用FileProvider方式
                Uri data = FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider", new File(file));

                Intent intent = context.getPackageManager().getLaunchIntentForPackage("cn.wps.moffice_eng");

                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

                Bundle bundle = new Bundle();
                intent.setData(data);//这里采用传入文档的在线地址进行打开，免除下载的步骤，也不需要判断安卓版本号
                intent.putExtras(bundle);
                context.startActivity(intent);
            }

        } else {
            if (checkWps(context)) {
                Intent intent = context.getPackageManager().getLaunchIntentForPackage("cn.wps.moffice_eng");
                Bundle bundle = new Bundle();
                intent.setData(Uri.fromFile(new File(file)));//这里采用传入文档的在线地址进行打开，免除下载的步骤，也不需要判断安卓版本号
                intent.putExtras(bundle);
                context.startActivity(intent);
            }
        }
    }

    public static boolean checkWps(Context context) {
        Intent intent = context.getPackageManager().getLaunchIntentForPackage("cn.wps.moffice_eng");//WPS个人版的包名
        if (intent == null) {

            ToastUtils.showLong("附件不能打开，请下载WPS软件！");
            return false;
        } else {
            return true;
        }
    }


    /**
     * 判断某APP是否安装
     *
     * @param context     上下文
     * @param packageName 包名
     * @return
     */
    public static boolean isAppExist(Context context, String packageName) {
        if (!TextUtils.isEmpty(packageName)) {
            PackageManager manager = context.getPackageManager();
            List<PackageInfo> list = manager.getInstalledPackages(0);
            for (PackageInfo info : list) {
                if (packageName.equalsIgnoreCase(info.packageName)) {
                    return true;
                }
            }
        }
        return false;
    }

}
